//package com.bestcem.xm.common.core.oss.service;
//
//import com.bestcem.xm.common.core.oss.entity.OssRecordEntity;
//import com.bestcem.xm.common.core.oss.enums.OssPathEnum;
//
//import java.io.File;
//import java.io.InputStream;
//
//public interface OssService {
//
//    /**
//     * 上传需要长时间存储文件
//     *
//     * @param file         上传文件对象
//     * @param fileName     文件名，例：aaa.txt
//     * @param modulePath   目录模块名前缀，使用不同目录区分不同模块文件，例：member/ds/
//     *                     长期存储文件目录
//     *                     {@link OssPathEnum#AWARD}
//     *                     {@link OssPathEnum#MEMBER}
//     *                     {@link OssPathEnum#TXTANLS}
//     *                     {@link OssPathEnum#OM}
//     * @param expireSecond 文件可用超时时间,单位为秒。如果要永久存储，可以传0或-1
//     * @param localDir     文件在本地的绝对路径，方便后续查找
//     * @param remark       上传文件用途，例如：文本分析-原话导出
//     * @return 访问文件的url
//     * modulePath参数请使用下面四种枚举
//     * @see OssPathEnum -AWARD
//     * @see OssPathEnum -MEMBER
//     * @see OssPathEnum -TXTANLS
//     * @see OssPathEnum -SAAS
//     */
//    String uploadSimpleFile(File file, String fileName, OssPathEnum modulePath, long expireSecond, String localDir, String remark);
//
//    /**
//     * 上传需要长时间存储文件
//     *
//     * @param file         上传文件对象
//     * @param fileName     文件名，例：aaa.txt
//     * @param path         目录模块名前缀，使用不同目录区分不同模块文件，例：member/ds/
//     *                     长期存储文件目录
//     * @param expireSecond 文件可用超时时间,单位为秒。如果要永久存储，可以传0或-1
//     * @param localDir     文件在本地的绝对路径，方便后续查找
//     * @param remark       上传文件用途，例如：文本分析-原话导出
//     * @return 访问文件的url
//     * modulePath参数请使用下面四种枚举
//     * @see OssPathEnum -AWARD
//     * @see OssPathEnum -MEMBER
//     * @see OssPathEnum -TXTANLS
//     * @see OssPathEnum -SAAS
//     */
//    String uploadSimpleFile2(File file, String fileName, String path, long expireSecond, String localDir, String remark, OssPathEnum modulePath);
//
//    /**
//     * 上传需要长时间存储文件
//     *
//     * @param file         上传文件对象
//     * @param fileName     文件名，例：aaa.txt
//     * @param modulePath   目录模块名前缀，使用不同目录区分不同模块文件，例：member/ds/
//     *                     长期存储文件目录
//     *                     {@link OssPathEnum#AWARD}
//     *                     {@link OssPathEnum#MEMBER}
//     *                     {@link OssPathEnum#TXTANLS}
//     *                     {@link OssPathEnum#OM}
//     * @param expireSecond 文件可用超时时间,单位为秒。如果要永久存储，可以传0或-1
//     * @param localDir     文件在本地的绝对路径，方便后续查找
//     * @param remark       上传文件用途，例如：文本分析-原话导出
//     * @return OssRecordEntity 保存记录
//     * modulePath参数请使用下面四种枚举
//     * @see OssPathEnum -AWARD
//     * @see OssPathEnum -MEMBER
//     * @see OssPathEnum -TXTANLS
//     * @see OssPathEnum -SAAS
//     */
//    OssRecordEntity uploadSimpleFileReturnEntity(File file, String fileName, OssPathEnum modulePath, long expireSecond, String localDir, String remark);
//
//    /**
//     * 上传临时存储文件,导出使用
//     *
//     * @param file         上传文件对象
//     * @param fileName     文件名，例：aaa.txt
//     * @param modulePath   目录模块名前缀，使用不同目录区分不同模块文件
//     *                     临时文件目录
//     *                     {@link OssPathEnum#TEMP_AWARD}
//     *                     {@link OssPathEnum#TEMP_MEMBER}
//     *                     {@link OssPathEnum#TEMP_TXTANLS}
//     *                     {@link OssPathEnum#TEMP_OM}
//     * @param expireSecond 文件可用超时时间，单位为秒
//     * @param localDir     文件在本地的绝对路径，方便后续查找
//     * @param remark       上传文件用途，例如：文本分析-原话导出
//     * @return 过期原因：modulePrefix使用枚举来定义
//     */
//    String uploadTempFile(File file, String fileName, OssPathEnum modulePath, long expireSecond, String localDir, String remark);
//
//    /**
//     * 上传临时存储文件,导出使用
//     *
//     * @param file         上传文件对象
//     * @param fileName     文件名，例：aaa.txt
//     * @param modulePath   目录模块名前缀，使用不同目录区分不同模块文件
//     *                     临时文件目录
//     *                     {@link OssPathEnum#TEMP_AWARD}
//     *                     {@link OssPathEnum#TEMP_MEMBER}
//     *                     {@link OssPathEnum#TEMP_TXTANLS}
//     *                     {@link OssPathEnum#TEMP_OM}
//     * @param expireSecond 文件可用超时时间，单位为秒
//     * @param localDir     文件在本地的绝对路径，方便后续查找
//     * @param remark       上传文件用途，例如：文本分析-原话导出
//     * @return 过期原因：modulePrefix使用枚举来定义 返回数据库保存实体
//     */
//    OssRecordEntity uploadTempFileReturnEntity(File file, String fileName, OssPathEnum modulePath, long expireSecond, String localDir, String remark);
//
//    /**
//     * 上传临时存储文件对应的字节流数组,导出使用
//     *
//     * @param data         上传文件对象对应的字节流数组
//     * @param fileName     文件名，例：aaa.txt
//     * @param modulePath   目录模块名前缀，使用不同目录区分不同模块文件
//     * @param expireSecond 文件可用超时时间，单位为秒
//     * @param remark       上传文件用途，例如：文本分析-原话导出
//     * @return java.lang.String
//     */
//    String uploadTempFile(byte[] data, String fileName, OssPathEnum modulePath,
//                          long expireSecond, String remark);
//
//    /**
//     * 上传永久存储文件，上传图片使用
//     * 注意，传入的文件名称一定要保证不重复，否则会覆盖之前的文件
//     *
//     * @param data       上传文件对象对应的字节流数组
//     * @param fileName   文件名，例：aaa.txt
//     * @param modulePath 目录模块名前缀，使用不同目录区分不同模块文件
//     * @param remark     上传文件用途，例如：文本分析-原话导出
//     * @return java.lang.String
//     */
//    String uploadFile(byte[] data, String fileName, OssPathEnum modulePath, String remark);
//
//    /**
//     * 根据key删除OSS文件
//     * 注意：只可以删除OSS_Record表中有记录的key，否则会返回删除失败，也就是0L
//     *
//     * @param key OSS中的key
//     * @return 删除条数, 删除成功为1，失败为0
//     */
//    long deleteByKey(String key);
//
//    /**
//     * 删除模块内OSS中未删除并且已过期的文件
//     * 由于风险较大，不推荐使用
//     *
//     * @param modulePath 模块目录
//     *                   {@link OssPathEnum#AWARD}
//     *                   {@link OssPathEnum#MEMBER}
//     *                   {@link OssPathEnum#TXTANLS}
//     *                   {@link OssPathEnum#OM}
//     *                   {@link OssPathEnum#TEMP_AWARD}
//     *                   {@link OssPathEnum#TEMP_MEMBER}
//     *                   {@link OssPathEnum#TEMP_TXTANLS}
//     *                   {@link OssPathEnum#TEMP_OM}
//     * @return 删除文件数量
//     * @see OssPathEnum
//     */
//    @Deprecated
//    long deleteTempByModule(OssPathEnum modulePath);
//
//    /**
//     * 下载文件流
//     *
//     * @param ossKey OSS中存储的key/NAS目录或key
//     * @return InputStream
//     */
//    InputStream downloadFile(String ossKey);
//
//    /**
//     * 下载文件
//     *
//     * @param ossKey OSS中存储的
//     * @param file   指定的下载到文件对象
//     */
//    void downloadFile(String ossKey, File file);
//
//    /**
//     * 下载文件
//     *
//     * @param url oss文件的url
//     * @return 返回流，使用流请记得关闭！！
//     */
//    InputStream downloadByUrl(String url);
//
//    /**
//     * 使用OSSKey直接删除OSS中的文件，不修改记录表
//     * 用来删除未存记录表的文件
//     *
//     * @param ossKey ossKey
//     */
//    void trueDelete(String ossKey);
//
//    /**
//     * 获取当前启用的oss的文件路径前缀
//     *
//     * @return java.lang.String
//     * @author zhangfeng <feng.zhang@idiaoyan.com>
//     * @date 2021/11/12 14:06
//     */
//    String getFilePrefix();
//
//    String getCdn();
//
//    String getUrlPrefix();
//}
